package ooday05;
//static的演示
public class StaticDemo {
    public static void main(String[] args) {
        Loo o1 = new Loo();
        o1.show();
        Loo o2 = new Loo();
        o2.show();
        Loo o3 = new Loo();
        o3.show();
        System.out.println(Loo.b); //常常通过类名点来访问
//1.0   1.1  2.1 3.0   ..5.0
// 50%  55%  60%  70%    90%
        Moo.test(); //常常通过类名点来访问

        Poo o4 = new Poo();
        Poo o5 = new Poo();
        Poo o6 = new Poo();
        Noo.plus(1,2);
    }


}

class Poo{
    static { //加载类时自动执行----最早执行
        System.out.println("静态块");
    }
    Poo(){
        System.out.println("构造方法");
    }
}

class Noo{ //演示静态方法何时用
    int a; //实例变量(描述对象的属性)

    //show方法中访问了对象的属性a，意味着与对象有关，所此不能设计为静态方法
    void show(){
        System.out.println(a);
    }
    //plus方法中没有访问对象的属性，意味着与对象无关，所以建议设计为静态方法
    static int plus(int num1,int num2){
        int num = num1+num2;
        return num;
    }
}

class Moo{ //演示静态方法
    int a;        //实例变量(对象点来访问)
    static int b; //静态变量(类名来访问)

    void show(){ //有隐式this
        System.out.println(this.a);
        System.out.println(Moo.b);
    }
    static void test(){ //没有隐式this
        //静态方法中没有隐式this传递，没有this就意味着没有对象
        //而实例变量a必须通1过对象点来访问，所以如下语句编译错误
        //System.out.println(a); //编译错误
        System.out.println(Moo.b);
    }
}


class Loo{ //演示静态变量
    int a;
    static int b;
    Loo(){
        a++;
        b++;
    }
    void show(){
        System.out.println("a="+a+"，b="+b);
    }
}


















